Compress all ::style-updated prior to ::realize
authorCarlos Garnacho <carlosg@gnome.org>
Tue, 4 Jan 2011 00:59:23 +0000 (01:59 +0100)
committerCarlos Garnacho <carlosg@gnome.org>
Tue, 4 Jan 2011 02:06:09 +0000 (03:06 +0100)
This is done to avoid early emission of this signal, that was
causing warnings during GtkDialog construction.

gtk/gtkwidget.c

index 18765972a14e541c7b0dcc6b08c1373bb6013811..c4851ee3078aad70387cd8c3c5fc9239e6d708b1 100644 (file)
@@ -312,7 +312,7 @@ struct _GtkWidgetPrivate
   guint has_grab              : 1;
   guint shadowed              : 1;
   guint rc_style              : 1;
-  guint user_style            : 1;
+  guint style_update_pending  : 1;
   guint app_paintable         : 1;
   guint double_buffered       : 1;
   guint redraw_on_alloc       : 1;
@@ -4266,6 +4266,9 @@ gtk_widget_realize (GtkWidget *widget)
 
       gtk_widget_ensure_style (widget);
 
+      if (priv->style_update_pending)
+        g_signal_emit (widget, widget_signals[STYLE_UPDATED], 0);
+
       g_signal_emit (widget, widget_signals[REALIZE], 0);
 
       gtk_widget_real_set_has_tooltip (widget,
@@ -13941,7 +13944,16 @@ style_context_changed (GtkStyleContext *context,
   GtkWidget *widget = user_data;
 
   gtk_widget_update_pango_context (widget);
-  g_signal_emit (widget, widget_signals[STYLE_UPDATED], 0);
+
+  if (gtk_widget_get_realized (widget))
+    g_signal_emit (widget, widget_signals[STYLE_UPDATED], 0);
+  else
+    {
+      /* Compress all style updates so it
+       * is only emitted once pre-realize.
+       */
+      widget->priv->style_update_pending = TRUE;
+    }
 
   if (widget->priv->anchored)
     gtk_widget_queue_resize (widget);